if (server->focused_window_id == new_focused_window)
return;
- /* Keep track of the new focused window */
- server->focused_window_id = new_focused_window;
-
memset (&focus_msg, 0, sizeof (focus_msg));
focus_msg.base.type = BROADWAY_EVENT_FOCUS;
focus_msg.base.time = broadway_server_get_last_seen_time (server);
- focus_msg.focus.id = new_focused_window;
+ focus_msg.focus.old_id = server->focused_window_id;
+ focus_msg.focus.new_id = new_focused_window;
broadway_events_got_input (&focus_msg, -1);
+
+ /* Keep track of the new focused window */
+ server->focused_window_id = new_focused_window;
}
guint32
break;
case BROADWAY_EVENT_FOCUS:
- window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.id));
+ window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.old_id));
+ if (window)
+ {
+ event = gdk_event_new (GDK_FOCUS_CHANGE);
+ event->focus_change.window = g_object_ref (window);
+ event->focus_change.in = FALSE;
+ gdk_event_set_device (event, display->core_pointer);
+ node = _gdk_event_queue_append (display, event);
+ _gdk_windowing_got_event (display, node, event, message->base.serial);
+ }
+ window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.new_id));
if (window)
{
event = gdk_event_new (GDK_FOCUS_CHANGE);